package com.huizluo.module1;

//查找 1000以内的因子
public class FindNumber {
    public static void main(String[] args) {
        FindNumber fn = new FindNumber();
        for(int n=1;n<1000;n++){
            if(fn.find(n)){
                fn.print(n);
            }
        }
    }
    private boolean find(int n){
        int sum = 0;
        //从1开始遍历小于n的数值
        for(int i =1;i<n;i++){
            //如果n % i 等于 0，说明i为n的因子
            if (n % i == 0){
                //把所有找到的因子累加
                sum+=i;
            }
        }
        //如果因子之和刚好等于n，说明n为完数
        if (sum == n){
            return true;
        }
        return false;
    }
    //这里的n已经是完数了，下面的打印逻辑都是基于此
    private void print(int n){
        int sum = 0;
        //1为任意数值的因子，默认打印
        System.out.printf("%d = 1",n);
        for (int i = 2;i<n;i++){
            if(n%i==0){
                sum+=i;
                //如果因子之和还不等于n，说明还没有加完，所以需要打印一个+
                if (sum!=n){
                    System.out.print("+");
                }
                System.out.printf("%d",i);
            }
        }
        System.out.print("\n");
    }
}
